home *** CD-ROM | disk | FTP | other *** search
Text File | 1999-06-25 | 5.1 KB | 237 lines | [TEXT/CWIE] |
- // ===========================================================================
- // CShadowWindow.cp ©1999 Eric Traut
- // ===========================================================================
-
- #include "CShadowWindow.h"
- #include "CBlurBehavior.h"
- #include "CInvertBehavior.h"
- #include "CDuplicateBehavior.h"
- #include "CCrashedBehavior.h"
- #include "CPigLatinBehavior.h"
- #include "CFlipBehavior.h"
- #include "CVBlankBehavior.h"
- #include "CNewCardBehavior.h"
- #include "CRebootBehavior.h"
- #include "CPongGameBehavior.h"
-
-
- // ---------------------------------------------------------------------------
- // • CShadowWindow
- // ---------------------------------------------------------------------------
-
- CShadowWindow::CShadowWindow(
- CWindowRecord * inWindowPtr)
- {
- mWindowPtr = inWindowPtr;
- mNeedsUpdate = false;
- mWindowBehavior = NULL;
- mIdleAction = kShadowActionNone;
- }
-
-
- // ---------------------------------------------------------------------------
- // • ~CShadowWindow
- // ---------------------------------------------------------------------------
-
- CShadowWindow::~CShadowWindow(void)
- {
- DeleteBehavior();
- }
-
-
- // ---------------------------------------------------------------------------
- // • AttachBehavior
- // ---------------------------------------------------------------------------
-
- void
- CShadowWindow::AttachBehavior(
- CWindowBehavior & inBehavior)
- {
- // Delete any existing behaviors
- DetachBehavior();
-
- mWindowBehavior = &inBehavior;
- }
-
-
- // ---------------------------------------------------------------------------
- // • DetachBehavior
- // ---------------------------------------------------------------------------
-
- void
- CShadowWindow::DetachBehavior(void)
- {
- if (HasBehavior())
- {
- GetBehavior()->DetachBehavior();
- DeleteBehavior();
- }
- }
-
-
- // ---------------------------------------------------------------------------
- // • DeleteBehavior
- // ---------------------------------------------------------------------------
-
- void
- CShadowWindow::DeleteBehavior(void)
- {
- delete mWindowBehavior;
- mWindowBehavior = NULL;
- }
-
-
- // ---------------------------------------------------------------------------
- // • HandleEvent
- // ---------------------------------------------------------------------------
-
- void
- CShadowWindow::HandleEvent(
- EventRecord * ioEvent,
- Boolean * ioResult)
- {
- if (HasBehavior())
- mWindowBehavior->HandleEvent(ioEvent, ioResult);
- }
-
-
- // ---------------------------------------------------------------------------
- // • DoIdleTask
- // ---------------------------------------------------------------------------
-
- void
- CShadowWindow::DoIdleTask(
- Boolean inGNETime)
- {
- if (mIdleAction != kShadowActionNone)
- {
- switch (mIdleAction)
- {
- case kShadowActionBlur:
- new CBlurBehavior(*this);
- break;
-
- case kShadowActionFlipH:
- new CFlipBehavior(*this, true);
- break;
-
- case kShadowActionFlipV:
- new CFlipBehavior(*this, false);
- break;
-
- case kShadowActionInvert:
- new CInvertBehavior(*this);
- break;
-
- case kShadowActionDuplicate:
- new CDuplicateBehavior(*this);
- break;
-
- case kShadowActionVBlank:
- new CVBlankBehavior(*this);
- break;
-
- case kShadowActionNextSlide:
- new CNewCardBehavior(*this);
- break;
-
- case kShadowActionRestore:
- DetachBehavior();
- break;
-
- case kShadowActionGame:
- new CPongGameBehavior(*this);
- break;
-
- case kShadowActionReboot:
- new CRebootBehavior(*this);
- break;
-
- case kShadowActionCrash:
- new CCrashedBehavior(*this);
- break;
-
- case kShadowActionPigLatin:
- new CPigLatinBehavior(*this);
- break;
-
- default:
- SignalPStr_("\pUnknown shadow action");
- break;
- }
-
- mIdleAction = kShadowActionNone;
- }
- else
- {
- if (HasBehavior())
- {
- Rect entirePort = {-0x4000, -0x4000, 0x4000, 0x4000};
-
- if (mWindowBehavior->SyncWithShadowWindow())
- {
- if (inGNETime && mNeedsUpdate)
- {
- ::SetPort(reinterpret_cast<GrafPtr>(mWindowPtr));
- ::InvalRect(&entirePort);
- mNeedsUpdate = false;
- }
-
- UseWindowsPort();
- mWindowBehavior->DoIdleTask(inGNETime);
- }
- else if (inGNETime)
- {
- ::SetPort(reinterpret_cast<GrafPtr>(mWindowPtr));
- ::InvalRect(&entirePort);
- mNeedsUpdate = false;
- }
- else
- {
- mNeedsUpdate = true;
- }
- }
- }
- }
-
-
- // ---------------------------------------------------------------------------
- // • GetWindowTitle
- // ---------------------------------------------------------------------------
-
- void
- CShadowWindow::GetWindowTitle(
- Str255 outName)
- {
- ::GetWTitle(reinterpret_cast<WindowPtr>(mWindowPtr), outName);
- }
-
-
- // ---------------------------------------------------------------------------
- // • UseWindowPort
- // ---------------------------------------------------------------------------
-
- void
- CShadowWindow::UseWindowsPort(void)
- {
- ::SetPort(reinterpret_cast<WindowPtr>(mWindowPtr));
- }
-
-
- // ---------------------------------------------------------------------------
- // • ShouldEnableRestoreMenu
- // ---------------------------------------------------------------------------
-
- Boolean
- CShadowWindow::ShouldEnableRestoreMenu(void)
- {
- if (!HasBehavior())
- return false;
-
- return mWindowBehavior->ShouldEnableRestoreMenu();
- }
-
-
-
-
-